package com.bdqn.service.impl;

import com.bdqn.dao.NewsDao;
import com.bdqn.pojo.News;
import com.bdqn.service.NewsService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * NewsServiceImpl
 *
 * @author LILIBO
 * @since 2024/7/4
 */
@Service("newsServiceImpl")
public class NewsServiceImpl implements NewsService {

    /**
     * 引入DAO层（实例化对应的实现）
     */
    // 在Service层直接引入实例对象（依赖性强）
    // private NewsDao newsDao = new NewsDaoMySQLImpl();
    // 使用简单工厂完成对接口实例的创建（转换到简单工厂中去获取）
    // private NewsDao newsDao = SimpleDaoFactory.getInstance();
    // 通过构造函数或Setter方法传入（可在调用时再传入，依赖倒置）

    // @Autowired // 默认按类型进行注入
    // @Qualifier("newsDaoOracleImpl") // 配合@Autowired注解实现按名称查找

    // @Resource(name = "newsDaoMySQLImpl") // 默认使用名称进行注入（找到相同名称的bean进行注入，可以使用name属性指定）
    // @Resource(type = NewsDaoRedisImpl.class) // 强制指定按类型进行注入
    @Resource
    private NewsDao newsDao;

    public NewsServiceImpl() {
    }

    /**
     * 在实例化NewsServiceImpl时必须给NewsDao赋值
     *
     * @param newsDao
     */
    public NewsServiceImpl(NewsDao newsDao) {
        this.newsDao = newsDao;
    }

    /**
     * 通过Setter方法完成对象的注入（依赖倒置）
     *
     * @param newsDao
     */
    public void setNewsDao(NewsDao newsDao) {
        this.newsDao = newsDao;
    }

    /**
     * 保存新闻
     *
     * @param news
     * @return
     */
    @Override
    public int save(News news) {
        // 添加日志记录
        try { // 当异常被捕获时，不会触发异常增强
            int n1 = 3;
            int n2 = 0;
            int num = n1 / n2;
        } catch (RuntimeException e) {
            e.getMessage();
            // throw e; // 抛出异常时，相当于方法报出了异常，会触发异常增强
        }
        return newsDao.save(news);
    }

}
